package 哈希表;

import java.util.HashMap;
import java.util.Map;

/**
 * 给你两个字符串：ransomNote 和 magazine ，判断 ransomNote 能不能由 magazine 里面的字符构成。
 * 如果可以，返回 true ；否则返回 false 。
 * magazine 中的每个字符只能在 ransomNote 中使用一次。
 *
 * 思路： 使用Hash表的思路
 *      1：使用HashMap统计magazine中每个字符出现的次数
 *      2：使用HashMap统计ransomNote中每个字符出现的次数
 *      3：进行比较：Not中需要的字符数大于magazine中该字符的次数，则返回false，证明没法构成；
 * 翻译代码.
 */
public class L_383 {

    public boolean canConstruct(String ransomNote, String magazine) {
        Map<Character,Integer> nodeMap = new HashMap<>();
        Map<Character,Integer> magazineMap = new HashMap<>();

        //1：统计magazine中每个字符出现的次数
        for (int i = 0; i < magazine.length(); i++) {
            magazineMap.put(magazine.charAt(i),magazineMap.getOrDefault(magazine.charAt(i),0)+1);
        }
        //2：统计ransomNote中每个字符出现的次数
        for (int i = 0; i < ransomNote.length(); i++) {
            nodeMap.put(ransomNote.charAt(i),nodeMap.getOrDefault(ransomNote.charAt(i),0)+1);
        }
        //3：再次遍历NoteMap,比较是否满足条件
        for (int i = 0; i < ransomNote.length() ; i++) {
            if(nodeMap.getOrDefault(ransomNote.charAt(i),0) > magazineMap.getOrDefault(ransomNote.charAt(i),0)){
                return false;
            }
        }
        return true;
    }
}
